﻿using AcademiaInteligenteData;
using AcademiaInteligenteData.DAL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace FuncionarioInteligenteData.DAL
{
    class DaoFuncionario : DaoConnection
    {
        public void InserirFuncionario(Funcionario funcionario)
        {
            string insertFuncionario = "ai_sp_inserirFuncionario";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", funcionario.Id));
            parametros[0].Direction = System.Data.ParameterDirection.InputOutput;
            parametros.Add(new SqlParameter("@id_academia", funcionario.Id_academia));
            parametros.Add(new SqlParameter("@nome", funcionario.Nome));
            parametros.Add(new SqlParameter("@id_tipo_funcionario", funcionario.TipoFuncionario.id));
            parametros.Add(new SqlParameter("@login", funcionario.Login));
            parametros.Add(new SqlParameter("@senha", funcionario.Senha));
            Executar(insertFuncionario, true, parametros);
            funcionario.Id = Convert.ToInt32(parametros[0].Value);
        }
        public void AlterarFuncionario(Funcionario funcionario)
        {
            string alterarFuncionario = "ai_sp_alterarFuncionario";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", funcionario.Id));
            parametros.Add(new SqlParameter("@id_academia", funcionario.Id_academia));
            parametros.Add(new SqlParameter("@nome", funcionario.Nome));
            parametros.Add(new SqlParameter("@id_tipo_funcionario", funcionario.TipoFuncionario.id));
            parametros.Add(new SqlParameter("@login", funcionario.Login));
            parametros.Add(new SqlParameter("@senha", funcionario.Senha));
            Executar(alterarFuncionario, true, parametros);
        }
        public void ExcluirFuncionarioPorID(int id)
        {
            string excluirFuncionario = "ai_sp_excluirFuncionario";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id", id));
            Executar(excluirFuncionario, true, parametros);
        }
        public Funcionario SelecionarFuncionarioPorID(int id)
        {
            string selecionaFuncionario = "ai_sp_selecionarFuncionario";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id", id));
            DataSet reader = Selecionar(selecionaFuncionario, true, parametros);
            int i = 0;
            Funcionario funcionario = new Funcionario();
            funcionario.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
            funcionario.Id_academia = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
            funcionario.Login = Convert.ToString(reader.Tables[0].Rows[i]["login"]);
            funcionario.Senha = Convert.ToString(reader.Tables[0].Rows[i]["senha"]);
            funcionario.TipoFuncionario.id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_funcionario"]);
            funcionario.Id = id;
            return funcionario;
        }
        public Funcionario SelecionarFuncionarPorLoginSenha(string login, string senha)
        {
            string selecionaFuncionario = "ai_sp_selecionarFuncionarioPorLoginSenha";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@login", login));
            parametros.Add(new SqlParameter("@senha", senha));
            DataSet reader = Selecionar(selecionaFuncionario, true, parametros);
            int i = 0;
            if (reader != null && reader.Tables.Count > 0 && reader.Tables[0].Rows.Count > 0)
            {
                Funcionario funcionario = new Funcionario();
                funcionario.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
                funcionario.Id_academia = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
                funcionario.Login = Convert.ToString(reader.Tables[0].Rows[i]["login"]);
                funcionario.Senha = Convert.ToString(reader.Tables[0].Rows[i]["senha"]);
                funcionario.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                funcionario.TipoFuncionario.id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_funcionario"]);
                return funcionario;
            }
            else
                return null;
        }

        public List<Funcionario> SelecionarFuncionariosPorAcademia(int idAcademia)
        {
            string selecionaFuncionarios = "ai_sp_listarFuncionarioAcademia";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_academia", idAcademia));
            DataSet reader = Selecionar(selecionaFuncionarios, true, parametros);
            
            List<Funcionario> funcionarios = new List<Funcionario>();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Funcionario funcionario = new Funcionario();
                funcionario.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
                funcionario.Id_academia = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
                funcionario.Login = Convert.ToString(reader.Tables[0].Rows[i]["login"]);
                funcionario.TipoFuncionario.id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_funcionario"]);
                funcionario.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                funcionarios.Add(funcionario);
            }
            return funcionarios;
        }
        
        public void InserirFuncionarioModalidade(int idFuncionario, int idModalidade)
        {
            string selecionaEventos = "ai_sp_inserirFuncionarioModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_instrutor", idFuncionario));
            parametros.Add(new SqlParameter("@id_modalidade_horario", idModalidade));
            Executar(selecionaEventos, true, parametros);
        }

        internal void RemoverFuncionarioModalidade(int idFuncionario, int idModalidade)
        {
            string selecionaEventos = "ai_sp_removerFuncionarioModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_instrutor", idFuncionario));
            parametros.Add(new SqlParameter("@id_modalidade_horario", idModalidade));
            Executar(selecionaEventos, true, parametros);
        }
    }
}
